x11: make _gdk_device_query_state report the master's device state
authorLionel Landwerlin <llandwerlin@gmail.com>
Fri, 17 May 2013 12:28:04 +0000 (13:28 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 20 May 2013 01:22:43 +0000 (21:22 -0400)
Calling XIQueryPointer() on a slave device is going to trigger a
BadDevice X error. So in case we query a slave device state, ask the
master device instead.

https://bugzilla.gnome.org/show_bug.cgi?id=700233

gdk/x11/gdkdevice-xi2.c

index 98032739774b1b6961b7d256fad96e5c3ed3a072..9755a06d47a22f5e36c7cb8f850d633cd2a9189d 100644 (file)
@@ -329,6 +329,16 @@ gdk_x11_device_xi2_query_state (GdkDevice        *device,
   display = gdk_window_get_display (window);
   default_screen = gdk_display_get_default_screen (display);
 
+  if (gdk_device_get_device_type (device) == GDK_DEVICE_TYPE_SLAVE)
+    {
+      GdkDevice *master = gdk_device_get_associated_device (device);
+
+      if (master)
+        _gdk_device_query_state (master, window, root_window, child_window,
+                                 root_x, root_y, win_x, win_y, mask);
+      return;
+    }
+
   if (!GDK_X11_DISPLAY (display)->trusted_client ||
       !XIQueryPointer (GDK_WINDOW_XDISPLAY (window),
                        device_xi2->device_id,